package abd.pr1.Controllers;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import javax.sql.DataSource;

import abd.pr1.Interface.EpisodioWindow;
import abd.pr1.Interface.MisSeriesPanel;
import abd.pr1.Mappers.EpisodiosMapper;
import abd.pr1.Mappers.SeguidoresMapper;
import abd.pr1.Mappers.SeriesMapper;
import abd.pr1.Mappers.UsuariosEpisodiosMapper;
import abd.pr1.Models.Episodio;
import abd.pr1.Models.Seguidor;
import abd.pr1.Models.Serie;
import abd.pr1.Models.Usuario;
import abd.pr1.Models.UsuarioEpisodio;

public class MisSeriesPanelController implements ActionListener {

	private MainWindowController mainWindowController;
	private MisSeriesPanel misSeriesPanel;
	private DataSource ds;
	private Usuario user;
	
	public MisSeriesPanelController(MainWindowController mainWindowController, MisSeriesPanel misSeriesPanel, DataSource ds, Usuario user) {
		
		this.mainWindowController= mainWindowController;
		this.misSeriesPanel= misSeriesPanel;
		this.ds=ds;
		this.user=user;
		
		refreshSeries();
		
	}

	public void refreshSeries(){
		
		List<Seguidor> ls = new SeguidoresMapper(ds).queryByExample(new Seguidor(this.user.getId(), null));
		List<Serie> lseries = new ArrayList<Serie>();
		
		for (Seguidor seguidor : ls) {
			lseries.add(new SeriesMapper(ds).findById(seguidor.getIdSerie()));
		}
					
		misSeriesPanel.setSerieCombo(lseries);
	}
	
	private void refreshEpisodios(){
		Serie selected = misSeriesPanel.getSerieCombo();
		if(selected!=null){			
			List<Episodio> episodios= new EpisodiosMapper(ds).getEpisodiosNoVistos(user, selected);
			Collections.sort(episodios);
			misSeriesPanel.setEpisodioTable(episodios);
		}
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand().equals("serie_combo")){
			
			refreshEpisodios();
			
		} else if (e.getActionCommand().equals("informacion_episodio")){
			
			Episodio episodioSelected=misSeriesPanel.getEpisodioSelected();
			if(episodioSelected!=null){
				new EpisodioWindowController(mainWindowController,new EpisodioWindow(), ds,user,episodioSelected);
			}
			
		} else if (e.getActionCommand().equals("marcar_como_visto")){
			Episodio selected = misSeriesPanel.getEpisodioSelected();
			if(new UsuariosEpisodiosMapper(ds).insert(new UsuarioEpisodio(user.getId(), selected.getId()))){
				refreshEpisodios();
			}
			
		}
	}

}

